// //类有两个部分：
// //1. 实例类型
interface ClockInterface {
    tick()
}
//2. 构造器接口类型
interface ClockConstructor {
    new(hour:number,minute:number):ClockInterface
}

// // 工厂方法：
// 参1：构造器
// 参2，参3：给构造器的参数
// 返回值：实例
// ************ 替换new 方法 使用 createClock 来进行类的实例化
function createClock(ctor:ClockConstructor,hour:number,minute:number):ClockInterface{
    return new ctor(hour, minute)
}

//两个时钟类：使用实例类型
class DigitalClock implements ClockInterface {
    constructor(h:number,m:number){
        console.log('DigitalClock')
    }
    tick(){
        console.log('beep  beep')
    }
}
class AnglogClock implements ClockInterface {
    constructor(h:number,m:number){
        console.log('AnglogClock')
    }
    tick(){
        console.log('tick  tick')
    }
}

//创建实例
let digital = createClock(DigitalClock, 12, 5)
let anglog = createClock(AnglogClock, 12, 5)

// interface studentConstructorInterface {
//     new(name: string, age: number, sex: number);
// }

// function CreateStudentConstructor(studentCls: studentConstructorInterface, name: string, age: number) {
//     return new studentCls(name, age, 1);
// }

// class Student {
//     private _name: string;
//     private _number: number;
//     constructor(name: string, age: number) {
//         this._name = name;
//         this._number = age;
//         console.log(this);
//     }

// }

// const student22 = CreateStudentConstructor(Student, "szq", 11);
// console.log(student22);